/*
 * BeagleStates.h
 *
 *  Created on: Apr 3, 2013
 *      Author: root
 */

#ifndef BEAGLESTATES_H_
#define BEAGLESTATES_H_
#include "State.h"
#include "StateMachine.h"
#include "GlobalVars.h"
#include "Buffer.h"

class ScanDocks: public State{
public:
	ScanDocks(){}
	void Enter(){}
	void Exit(){}
	void Execute(StateMachine* s,Buffer* b,GlobalVars* v,CvCapture* cap);
	~ScanDocks(){}

	static ScanDocks* instance(){
		static ScanDocks instance;
		return &instance;
	}
};

class ScanAndPlaceBlocks: public State{
public:
	ScanAndPlaceBlocks(){}
	void Enter(){}
	void Exit(){}
	void Execute(StateMachine* s,Buffer* b,GlobalVars* v,CvCapture* cap);
	~ScanAndPlaceBlocks(){}
	static ScanAndPlaceBlocks* instance(){
			static ScanAndPlaceBlocks instance;
			return &instance;
		}
};

class PlaceBlocks: public State{
public:
	PlaceBlocks(){}
	void Enter(){}
	void Exit(){}
	void Execute(StateMachine* s,Buffer* b,GlobalVars* v,CvCapture* cap);
	~PlaceBlocks(){}
	static PlaceBlocks* instance(){
			static PlaceBlocks instance;
			return &instance;
		}
};

class PlaceBlocksAir: public State{
public:
	PlaceBlocksAir(){}
	void Enter(){}
	void Exit(){}
	void Execute(StateMachine* s,Buffer* b,GlobalVars* v,CvCapture* cap);
	~PlaceBlocksAir(){}
	static PlaceBlocksAir* instance(){
			static PlaceBlocksAir instance;
			return &instance;
		}
};

class Terminate : public State{
public:
	Terminate(){}
	void Enter(){}
	void Execute(StateMachine* s,Buffer* b,GlobalVars* v,CvCapture* cap);
	void Exit(){}
	~Terminate(){}
	static Terminate* instance(){
		static Terminate instance;
		return &instance;
	}
};


class Debug : public State{
public:
	Debug(){}
	void Enter(){}
	void Execute(StateMachine* s,Buffer* b,GlobalVars* v,CvCapture* cap);
	void Exit(){}
	~Debug(){}
	static Debug* instance(){
		static Debug instance;
		return &instance;
	}


};
#endif /* BEAGLESTATES_H_ */
